# !/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
@作者 杨阳
@时间 2018-07-03
@说明 Redis工具类
@注意事项
"""
import json
import re

from util import LogUtil
from util.ThreadPluginsInitUtil import redis


def get_value(key):
    """
    根据key获得缓存
    :param key:     缓存的key
    :return:        从缓存中拿到数据后，需要先将单引号转换为双引号，再用json.loads转换成pythone对象
    """
    LogUtil.info("====================================获取缓存====================================")
    LogUtil.info("key:{}".format(key))
    # 1. 获得缓存中的字符串
    try:
        str = redis.get(key)
        LogUtil.info("从缓存中得到的字符串：{}".format(str))
        if str:
            # 2. 如果存入缓存时是json，那么取出后字符串中的双引会变成单引，这里替换下
            newStr = re.sub('\'', '\"', str)
            LogUtil.info("替换单引后字符串：{}".format(newStr))
            # 3. python Obj
            value = json.loads(newStr)
            LogUtil.info("最终值：{}".format(value))
            return value
        else:
            return None

    except Exception as e:
        LogUtil.info("连接redis异常，获取缓存，从数据库中获取！{}".format(e))
        return None
    finally:
        LogUtil.info("====================================获取缓存====================================")


def set_value(key, value):
    """
    设置redis缓存
    :param key:     key值
    :param value:   放入缓存的值
    :return:
    """
    try:
        LogUtil.info("====================================设置缓存====================================")
        LogUtil.info("键：{}".format(key))
        LogUtil.info("值：{}".format(value))
        redis.set(key, value)
    except Exception as e:
        LogUtil.info("连接redis异常，缓存设置失败！{}".format(e))
    finally:
        LogUtil.info("====================================设置缓存====================================")


def delete_key_by_pattern(pattern):
    """
    根据传入的表达式，删除key
    示例：
        print r.set('111', '11')
        print r.set('122', '12')
        print r.set('113', '13')
        print r.keys(pattern='11*')
        # 输出的结果是 ['113', '111'] 因为键122不和 11* 匹配
    :param key:     模拟匹配的key
    :return:
    """
    try:
        LogUtil.info("====================================删除缓存====================================")
        LogUtil.info("表达式：{}".format(pattern))
        keys = redis.keys(pattern=pattern)
        for key in keys:
            LogUtil.info("匹配的key:{}".format(key))
        redis.delete(*keys)
    except Exception as e:
        LogUtil.info("连接redis异常，删除缓存失败！{}".format(e))
    finally:
        LogUtil.info("====================================删除缓存====================================")
